<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
               "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>Programming</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<meta name="title" content="Programming"/>
<meta name="generator" content="Org-mode"/>
<meta name="generated" content="2013-09-27T14:32-0400"/>
<meta name="author" content="Nick Guthrie"/>
<meta name="description" content=""/>
<meta name="keywords" content=""/>
<style type="text/css">
 <!--/*--><![CDATA[/*><!--*/
  html { font-family: Times, serif; font-size: 12pt; }
  .title  { text-align: center; }
  .todo   { color: red; }
  .done   { color: green; }
  .tag    { background-color: #add8e6; font-weight:normal }
  .target { }
  .timestamp { color: #bebebe; }
  .timestamp-kwd { color: #5f9ea0; }
  .right  {margin-left:auto; margin-right:0px;  text-align:right;}
  .left   {margin-left:0px;  margin-right:auto; text-align:left;}
  .center {margin-left:auto; margin-right:auto; text-align:center;}
  p.verse { margin-left: 3% }
  pre {
	border: 1pt solid #AEBDCC;
	background-color: #F3F5F7;
	padding: 5pt;
	font-family: courier, monospace;
        font-size: 90%;
        overflow:auto;
  }
  table { border-collapse: collapse; }
  td, th { vertical-align: top;  }
  th.right  { text-align:center;  }
  th.left   { text-align:center;   }
  th.center { text-align:center; }
  td.right  { text-align:right;  }
  td.left   { text-align:left;   }
  td.center { text-align:center; }
  dt { font-weight: bold; }
  div.figure { padding: 0.5em; }
  div.figure p { text-align: center; }
  div.inlinetask {
    padding:10px;
    border:2px solid gray;
    margin:10px;
    background: #ffffcc;
  }
  textarea { overflow-x: auto; }
  .linenr { font-size:smaller }
  .code-highlighted {background-color:#ffff00;}
  .org-info-js_info-navigation { border-style:none; }
  #org-info-js_console-label { font-size:10px; font-weight:bold;
                               white-space:nowrap; }
  .org-info-js_search-highlight {background-color:#ffff00; color:#000000;
                                 font-weight:bold; }
  /*]]>*/-->
</style>
<link rel="stylesheet" type="text/css" href="./nmg.css" />
<script type="text/javascript" src="http://orgmode.org/org-info.js">
/**
 *
 * @source: http://orgmode.org/org-info.js
 *
 * @licstart  The following is the entire license notice for the
 *  JavaScript code in http://orgmode.org/org-info.js.
 *
 * Copyright (C) 2012  Sebastian Rose
 *
 *
 * The JavaScript code in this tag is free software: you can
 * redistribute it and/or modify it under the terms of the GNU
 * General Public License (GNU GPL) as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option)
 * any later version.  The code is distributed WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
 *
 * As additional permission under GNU GPL version 3 section 7, you
 * may distribute non-source (e.g., minimized or compacted) forms of
 * that code without the copy of the GNU GPL normally required by
 * section 4, provided you include this license notice and a URL
 * through which recipients can access the Corresponding Source.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in http://orgmode.org/org-info.js.
 *
 */
</script>

<script type="text/javascript">

/*
@licstart  The following is the entire license notice for the
JavaScript code in this tag.

Copyright (C) 2012  Free Software Foundation, Inc.

The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version.  The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.

As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.


@licend  The above is the entire license notice
for the JavaScript code in this tag.
*/

<!--/*--><![CDATA[/*><!--*/
org_html_manager.set("TOC_DEPTH", "3");
org_html_manager.set("LINK_HOME", "http://code.google.com/p/embedd-gui/");
org_html_manager.set("LINK_UP", "");
org_html_manager.set("LOCAL_TOC", "1");
org_html_manager.set("VIEW_BUTTONS", "0");
org_html_manager.set("MOUSE_HINT", "underline");
org_html_manager.set("FIXED_TOC", "0");
org_html_manager.set("TOC", "0");
org_html_manager.set("VIEW", "overview");
org_html_manager.setup();  // activate after the parameters are set
/*]]>*///-->
</script>
<script type="text/javascript">
/*
@licstart  The following is the entire license notice for the
JavaScript code in this tag.

Copyright (C) 2012  Free Software Foundation, Inc.

The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version.  The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.

As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.


@licend  The above is the entire license notice
for the JavaScript code in this tag.
*/
<!--/*--><![CDATA[/*><!--*/
 function CodeHighlightOn(elem, id)
 {
   var target = document.getElementById(id);
   if(null != target) {
     elem.cacheClassElem = elem.className;
     elem.cacheClassTarget = target.className;
     target.className = "code-highlighted";
     elem.className   = "code-highlighted";
   }
 }
 function CodeHighlightOff(elem, id)
 {
   var target = document.getElementById(id);
   if(elem.cacheClassElem)
     elem.className = elem.cacheClassElem;
   if(elem.cacheClassTarget)
     target.className = elem.cacheClassTarget;
 }
/*]]>*///-->
</script>

</head>
<body>
<div id="org-div-home-and-up" style="text-align:right;font-size:70%;white-space:nowrap;">
 <a accesskey="h" href="http://code.google.com/p/embedd-gui/"> UP </a>
 |
 <a accesskey="H" href="http://code.google.com/p/embedd-gui/"> HOME </a>
</div>

<div id="preamble">

</div>

<div id="content">
<h1 class="title">Programming</h1>






<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#sec-1">Preparing Programming Environment</a>
<ul>
<li><a href="#sec-1-1">Main IDE</a>
<ul>
<li><a href="#sec-1-1-1">Install Summary</a></li>
<li><a href="#sec-1-1-2">Install Qt Summary</a></li>
<li><a href="#sec-1-1-3">Installing Qt for Embedded Linux</a></li>
<li><a href="#sec-1-1-4">Cross-Compiling Qt for Embedded Linux Applications</a></li>
</ul></li>
</ul>
</li>
<li><a href="#sec-2">QT</a>
<ul>
<li><a href="#sec-2-1">Overview </a></li>
<li><a href="#sec-2-2">Cross Compiling </a>
<ul>
<li><a href="#sec-2-2-1">Step 1: Set the Cross-Compiler's Path</a></li>
<li><a href="#sec-2-2-2">Step 2: Create a Target Specific qmake Specification</a></li>
<li><a href="#sec-2-2-3">Step 3: Provide Architecture Specific Files</a></li>
<li><a href="#sec-2-2-4">Step 4: Provide Hardware Drivers</a></li>
<li><a href="#sec-2-2-5">Step 5: Build the Target Specific Executable</a></li>
<li><a href="#sec-2-2-6">Then build the executable:</a></li>
</ul>
</li>
<li><a href="#sec-2-3">Links</a></li>
</ul>
</li>
<li><a href="#sec-3">Programming for A13 in Debian </a>
<ul>
<li><a href="#sec-3-1">Programming for A13 in debian</a></li>
<li><a href="#sec-3-2">Cross Compiling</a>
<ul>
<li><a href="#sec-3-2-1">Setting up the tool chain</a></li>
</ul>
</li>
<li><a href="#sec-3-3">Programming on the A13 board</a></li>
</ul>
</li>
<li><a href="#sec-4">Debugging</a>
<ul>
<li><a href="#sec-4-1">Debugging on embedded using opensource tools (part 1) </a>
<ul>
<li><a href="#sec-4-1-1">Overview</a></li>
<li><a href="#sec-4-1-2">Set up a GCC Cross compiler project in Eclipse</a></li>
</ul></li>
</ul>
</li>
<li><a href="#sec-5">Building Debian</a>
<ul>
<li><a href="#sec-5-1">Building bootable SD-card with Debian Linux Image for A13-OLinuXino</a>
<ul>
<li><a href="#sec-5-1-1">Info</a></li>
<li><a href="#sec-5-1-2">Article</a></li>
</ul>
</li>
<li><a href="#sec-5-2">Build Bootable SD Card with Debian</a>
<ul>
<li><a href="#sec-5-2-1">Info</a></li>
<li><a href="#sec-5-2-2">Article</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>

<div id="outline-container-1" class="outline-2">
<h2 id="sec-1">Preparing Programming Environment</h2>
<div class="outline-text-2" id="text-1">


</div>

<div id="outline-container-1-1" class="outline-3">
<h3 id="sec-1-1">Main IDE</h3>
<div class="outline-text-3" id="text-1-1">


</div>

<div id="outline-container-1-1-1" class="outline-4">
<h4 id="sec-1-1-1">Install Summary</h4>
<div class="outline-text-4" id="text-1-1-1">

<ul>
<li>Add Files



<pre class="src src-sh">sudo apt-get install gcc g++ make libncurses5-dev
</pre>

</li>
<li>Add repository <sup><a class="footref" name="fnr-.1" href="#fn-.1">1</a></sup>
<ul>
<li>Backup List



<pre class="src src-sh">sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
</pre>

</li>
<li>Add the following line to /etc/apt/sources.list



<pre class="example">deb http://www.emdebian.org/debian/ squeeze main
</pre>

</li>
<li>Update Packages



<pre class="src src-sh">sudo apt-get update; sudo apt-get upgrade; 
</pre>

</li>
</ul>

</li>
<li>Install the following packages:



<pre class="src src-sh">sudo apt-get install linux-libc-dev-armel-cross
sudo apt-get install libc6-armel-crossb
sudo apt-get install libc6-dev-armel-cross
sudo apt-get install binutils-arm-linux-gnueabi
sudo apt-get install gcc-4.4-arm-linux-gnueabi
sudo apt-get install g++-4.4-arm-linux-gnueabi
sudo apt-get install uboot-mkimage
</pre>

</li>
</ul>

</div>

</div>

<div id="outline-container-1-1-2" class="outline-4">
<h4 id="sec-1-1-2">Install Qt Summary</h4>
<div class="outline-text-4" id="text-1-1-2">

<ol>
<li>Install qtcreator



<pre class="src src-sh">sudo apt-get install qtcreator
</pre>

</li>
<li>Download Qt libraries 4.8.4 for embedded Linux (226 MB) from <a href="http://qt-project.org/downloads">http://qt-project.org/downloads</a>.
</li>
</ol>



</div>

</div>

<div id="outline-container-1-1-3" class="outline-4">
<h4 id="sec-1-1-3">Installing Qt for Embedded Linux</h4>
<div class="outline-text-4" id="text-1-1-3">

<ul>
<li>This document describes how to install Qt for Embedded Linux in your development environment:
</li>
</ul>

<ul>
<li id="sec-1-1-3-1">Step 1: Unpacking the Archive<br/>
<ul>
<li>First uncompress the archive in the preferred location, then unpack it:
 cd &lt;anywhere&gt;



<pre class="src src-sh">gunzip qt-everywhere-opensource-src-4.8.4.tar.gz;
tar xf qt-everywhere-opensource-src-4.8.4.tar;
</pre>

<ul>
<li>This document assumes that the archive is unpacked in the following directory:



<pre class="example">~/qt-everywhere-opensource-src-4.8.4
</pre>

</li>
</ul>

</li>
</ul>


</li>
</ul>
<ul>
<li id="sec-1-1-3-2">Step 2: Building the Library<br/>
<ul>
<li>Before building the Qt for Embedded Linux library, run the ./configure script to configure the library for your development architecture.



<pre class="src src-sh">./configure
</pre>

<ul>
<li>You can list all of the configuration system's options by typing



<pre class="src src-sh">./configure -embedded -help 
</pre>

<ul>
<li>The Configuration Options for Qt page gives a brief overview of these.
</li>
<li>Note that by default, Qt for Embedded Linux is configured for installation in the /usr/local/Trolltech/QtEmbedded-4.8.4 directory, but this can be changed by using the -prefix option. Alternatively, the -prefix-install option can be used to specify a "local" installation within the source directory.
</li>
<li>The configuration system is also designed to allow you to specify your platform architecture:



<pre class="src src-sh"><span style="color: #b0c4de;">cd</span>  ~/qt-everywhere-opensource-src-4.8.4
./configure -embedded [architecture]
</pre>

<ul>
<li>In general, all Linux systems which have framebuffer support can use the generic architecture. Other typical architectures are x86, arm and mips.
</li>
<li>Note: If you want to build Qt for Embedded Linux for use with a virtual framebuffer, pass the -qvfb option to the configure script.
</li>
</ul>

</li>
</ul>

</li>
</ul>

</li>
<li>To create the library and compile all the demos, examples, tools, and tutorials, type:



<pre class="src src-sh">make
</pre>

<ul>
<li>On some systems the make utility is named differently, e.g. gmake. The configure script tells you which make utility to use.
</li>
</ul>

</li>
<li>If you did not configure Qt for Embedded Linux using the -prefix-install option, you need to install the library, demos, examples, tools, and tutorials in the appropriate place. To do this, type:



<pre class="src src-sh">su -c <span style="color: #ffc1c1;">"make install"</span>
</pre>

<ul>
<li>and enter the root password.
</li>
<li>Note: You can use the INSTALL_ROOT environment variable to specify the location of the installed files when invoking make install.
</li>
</ul>

</li>
</ul>

</li>
</ul>
<ul>
<li id="sec-1-1-3-3">Step 3: Adjusting the Environment Variables<br/>
<ul>
<li>In order to use Qt for Embedded Linux, the PATH variable must be extended to locate qmake, moc and other Qt for Embedded Linux tools, and the LD_LIBRARY_PATH must be extended for compilers that do not support rpath.
</li>
<li>To set the PATH variable, add the following lines to your .profile file if your shell is bash, ksh, zsh or sh:



<pre class="src src-sh"><span style="color: #7fffd4;">PATH</span>=/usr/local/Trolltech/QtEmbedded-4.8.4/bin:$<span style="color: #7fffd4;">PATH</span>
<span style="color: #b0c4de;">export</span> PATH
</pre>

<ul>
<li>In case your shell is csh or tcsh, add the following line to the .login file instead:



<pre class="src src-sh">setenv PATH /usr/local/Trolltech/QtEmbedded-4.8.4/bin:$<span style="color: #7fffd4;">PATH</span>   
</pre>

</li>
<li>If you use a different shell, please modify your environment variables accordingly.
</li>
</ul>

</li>
<li>For compilers that do not support rpath you must also extend the LD_LIBRARY_PATH environment variable to include /usr/local/Trolltech/QtEmbedded-4.8.4/lib. Note that on Linux with GCC, this step is not needed.
</li>
</ul>

</li>
</ul>
<ul>
<li id="sec-1-1-3-4">Step 4: Building the Virtual Framebuffer<br/>
<ul>
<li>For development and debugging, Qt for Embedded Linux provides a virtual framebuffer as well as the option of running Qt for Embedded Linux as a VNC server.
</li>
<li>For a description of how to install the virtual framebuffer and how to use the VNC protocol, please consult the documentation at:
<ul>
<li>The Virtual Framebuffer
</li>
<li>The VNC Protocol and Qt for Embedded Linux
</li>
</ul>

</li>
<li>Note that the virtual framebuffer requires a Qt for X11 installation. See Installing Qt for X11 Platforms for details.
</li>
<li>The Linux framebuffer, on the other hand, is enabled by default on all modern Linux distributions.
<ul>
<li>For information on older versions, see <a href="http://en.tldp.org/HOWTO/Framebuffer-HOWTO.html">http://en.tldp.org/HOWTO/Framebuffer-HOWTO.html</a>.
</li>
</ul>

</li>
<li>To test that the Linux framebuffer is set up correctly, use the program provided by the Testing the Linux Framebuffer document.
</li>
</ul>


</li>
</ul>
</div>

</div>

<div id="outline-container-1-1-4" class="outline-4">
<h4 id="sec-1-1-4">Cross-Compiling Qt for Embedded Linux Applications</h4>
<div class="outline-text-4" id="text-1-1-4">

<ul>
<li>Cross-compiling is the process of compiling an application on one machine, producing executable code for a different machine or device. To cross-compile a Qt for Embedded Linux application, use the following approach:
<ul>
<li>Note: The cross-compiling procedure has the configuration process in common with the installation procedure; i.e., you might not necessarily have to perform all the mentioned actions depending on your current configuration.
</li>
</ul>

</li>
</ul>

<ul>
<li id="sec-1-1-4-1">Step 1: Set the Cross-Compiler's Path<br/>
<ul>
<li>Specify which cross-compiler to use by setting the PATH environment variable. For example, if the current shell is bash, ksh, zsh or sh:



<pre class="src src-sh"><span style="color: #b0c4de;">export</span> <span style="color: #7fffd4;">PATH</span>=path/to/cross/compiler:$<span style="color: #7fffd4;">PATH</span>
</pre>

</li>
</ul>

</li>
</ul>
<ul>
<li id="sec-1-1-4-2">Step 2: Create a Target Specific qmake Specification<br/>
<ul>
<li>The qmake tool requires a platform and compiler specific qmake.conf file describing the various default values, to generate the appropriate Makefiles. The standard Qt for Embedded Linux distribution provides such files for several combinations of platforms and compilers. These files are located in the distribution's mkspecs/qws subdirectory.
</li>
<li>Each platform has a default specification. Qt for Embedded Linux will use the default specification for the current platform unless told otherwise. To override this behavior, you can use the configure script's -platform option to change the specification for the host platform (where compilation will take place).
</li>
<li>The configure script's -xplatform option is used to provide a specification for the target architecture (where the library will be deployed).
</li>
<li>For example, to cross-compile an application to run on a device with an ARM architecture, using the GCC toolchain, run the configure script at the command line in the following way:



<pre class="example">./configure -embedded arm -xplatform qws/linux-arm-g++ &lt;other options&gt; 
</pre>

<ul>
<li>If neither of the provided specifications fits your target device, you can create your own. To create a custom qmake.conf file, just copy and customize an already existing file. For example:



<pre class="src src-sh">cp path/to/QtEmbedded/mkspecs/qws/linux-mips-g++/... path/to/QtEmbedded/mkspecs/qws/linux-myarchitecture-g++/...
</pre>

<ul>
<li>Note: When defining a mkspec for a Linux target, the directory must be prefixed with "linux-". We recommend that you copy the entire directory.
</li>
<li>Note also that when providing you own qmake specifcation, you must use the configure script's -xplatform option to make Qt for Embedded Linux aware of the custom qmake.conf file.
</li>
</ul>

</li>
</ul>

</li>
</ul>

</li>
</ul>
<ul>
<li id="sec-1-1-4-3">Step 3: Provide Architecture Specific Files<br/>
<ul>
<li>Starting with Qt 4, all of Qt's implicitly shared classes can safely be copied across threads like any other value classes, i.e., they are fully reentrant. This is accomplished by implementing reference counting operations using atomic hardware instructions on all the different platforms supported by Qt.
</li>
<li>To support a new architecture, it is important to ensure that these platform-specific atomic operations are implemented in a corresponding header file (qatomic_ARCH.h), and that this file is located in Qt's src/corelib/arch directory.
</li>
<li>For example, the Intel 80386 implementation is located in



<pre class="example">src/corelib/arch/qatomic_i386.h.
</pre>

<ul>
<li>See the Implementing Atomic Operations documentation for details.
</li>
</ul>

</li>
</ul>

</li>
</ul>
<ul>
<li id="sec-1-1-4-4">Step 4: Provide Hardware Drivers<br/>
<ul>
<li>Without the proper mouse and keyboard drivers, you will not be able to give any input to your application when it is installed on the target device. You must also ensure that the appropriate screen driver is present to make the server process able to put the application's widgets on screen.
</li>
<li>Qt for Embedded Linux provides several ready-made mouse, keyboard and screen drivers, see the pointer handling, character input and display management documentation for details.
</li>
<li>In addition, custom drivers can be added by deriving from the QWSMouseHandler, QWSKeyboardHandler and QScreen classes respectively, and by creating corresponding plugins to make use of Qt's plugin mechanism (dynamically loading the drivers into the server application at runtime). Note that the plugins must be located in a location where Qt will look for plugins, e.g., the standard plugin directory.
</li>
<li>See the How to Create Qt Plugins documentation and the Plug &amp; Paint example for details.
</li>
</ul>

</li>
</ul>
<ul>
<li id="sec-1-1-4-5">Step 5: Build the Target Specific Executable<br/>
<ul>
<li>Before building the executable, you must specify the target architecture as well as the target specific hardware drivers by running the configure script:



<pre class="src src-sh"><span style="color: #b0c4de;">cd</span> path/to/QtEmbedded
./configure -embedded &lt;architecture&gt; -qt-kbd-&lt;keyboarddriver&gt;
         -qt-mouse-&lt;mousedriver&gt; -qt-gfx-&lt;screendriver&gt; 
</pre>

<ul>
<li>It is also important to make sure that all the third party libraries that the application and the Qt libraries require, are present in the tool chain.
</li>
<li>In particular, if the zlib and jpeg libraries are not available, they must be included by running the configure script with the -L and -I options.
<ul>
<li>For example:



<pre class="src src-sh"><span style="color: #b0c4de;">cd</span> path/to/QtEmbedded
./configure  &lt;other options&gt;
             -L /path/to/libjpeg/libraries -I /path/to/libjpeg/headers     
</pre>

<ul>
<li>The JPEG source can be downloaded from <a href="http://www.ijg.org/">http://www.ijg.org/</a>. The Qt for Embedded Linux distribution includes a version of the zlib source that can be compiled into the Qt for Embedded Linux library. If integrators wish to use a later version of the zlib library, it can be downloaded from the <a href="http://www.gzip.org/zlib/">http://www.gzip.org/zlib/</a> website.
</li>
</ul>

</li>
</ul>

</li>
</ul>

</li>
<li>Then build the executable:



<pre class="src src-sh"><span style="color: #b0c4de;">cd</span> path/to/myApplication
qmake -project
qmake
make
</pre>

</li>
<li>That's all. Your target specific executable is ready for deployment.
</li>
</ul>

<p>See also:
Qt for Embedded Linux Architecture and Deploying Qt for Embedded Linux Applications.
</p>
</li>
</ul>
</div>
</div>
</div>

</div>

<div id="outline-container-2" class="outline-2">
<h2 id="sec-2">QT</h2>
<div class="outline-text-2" id="text-2">


</div>

<div id="outline-container-2-1" class="outline-3">
<h3 id="sec-2-1">Overview <sup><a class="footref" name="fnr-.2" href="#fn-.2">2</a></sup></h3>
<div class="outline-text-3" id="text-2-1">

<p>Qt for Embedded Linux applications write directly to the framebuffer, eliminating the need for the X Window System and saving memory. The Linux framebuffer is enabled by default on all modern Linux distributions. 
</p></div>

</div>

<div id="outline-container-2-2" class="outline-3">
<h3 id="sec-2-2">Cross Compiling <sup><a class="footref" name="fnr-.3" href="#fn-.3">3</a></sup></h3>
<div class="outline-text-3" id="text-2-2">


</div>

<div id="outline-container-2-2-1" class="outline-4">
<h4 id="sec-2-2-1">Step 1: Set the Cross-Compiler's Path</h4>
<div class="outline-text-4" id="text-2-2-1">

<ul>
<li>Specify which cross-compiler to use by setting the PATH environment variable. For example, if the current shell is bash, ksh, zsh or sh:



<pre class="src src-sh"><span style="color: #b0c4de;">export</span> <span style="color: #7fffd4;">PATH</span>=path/to/cross/compiler:$<span style="color: #7fffd4;">PATH</span>
</pre>

</li>
</ul>

</div>

</div>

<div id="outline-container-2-2-2" class="outline-4">
<h4 id="sec-2-2-2">Step 2: Create a Target Specific qmake Specification</h4>
<div class="outline-text-4" id="text-2-2-2">

<ul>
<li>The qmake tool requires a platform and compiler specific qmake.conf file describing the various default values, to generate the appropriate Makefiles.
<ul>
<li>The standard Qt for Embedded Linux distribution provides such files for several combinations of platforms and compilers.
</li>
<li>These files are located in the distribution's mkspecs/qws subdirectory.
</li>
</ul>

</li>
<li>Each platform has a default specification.
<ul>
<li>Qt for Embedded Linux will use the default specification for the current platform unless told otherwise.
</li>
<li>To override this behavior, you can use the configure script's -platform option to change the specification for the host platform (where compilation will take place).
</li>
</ul>

</li>
<li>The configure script's -xplatform option is used to provide a specification for the target architecture (where the library will be deployed).
</li>
<li>For example, to cross-compile an application to run on a device with an ARM architecture, using the GCC toolchain, run the configure script at the command line in the following way:



<pre class="src src-sh">./configure -embedded arm -xplatform qws/linux-arm-g++ &lt;other options&gt;
</pre>

<ul>
<li>If neither of the provided specifications fits your target device, you can create your own.
</li>
<li>To create a custom qmake.conf file, just copy and customize an already existing file. For example:



<pre class="src src-sh">cp path/to/QtEmbedded/mkspecs/qws/linux-mips-g++/... path/to/QtEmbedded/mkspecs/qws/linux-myarchitecture-g++/...
</pre>

<ul>
<li>Note: When defining a mkspec for a Linux target, the directory must be prefixed with "linux-". We recommend that you copy the entire directory.
</li>
<li>Note also that when providing you own qmake specifcation, you must use the configure script's -xplatform option to make Qt for Embedded Linux aware of the custom qmake.conf file.
</li>
</ul>

</li>
</ul>

</li>
</ul>

</div>

</div>

<div id="outline-container-2-2-3" class="outline-4">
<h4 id="sec-2-2-3">Step 3: Provide Architecture Specific Files</h4>
<div class="outline-text-4" id="text-2-2-3">

<ul>
<li>Starting with Qt 4, all of Qt's implicitly shared classes can safely be copied across threads like any other value classes, i.e., they are fully reentrant.
<ul>
<li>This is accomplished by implementing reference counting operations using atomic hardware instructions on all the different platforms supported by Qt.
</li>
</ul>

</li>
<li>To support a new architecture, it is important to ensure that these platform-specific atomic operations are implemented in a corresponding header file (qatomic_ARCH.h), and that this file is located in Qt's src/corelib/arch directory.
<ul>
<li>For example, the Intel 80386 implementation is located in src/corelib/arch/qatomic_i386.h.
</li>
</ul>

</li>
<li>See the Implementing Atomic Operations documentation for details.
</li>
</ul>

</div>

</div>

<div id="outline-container-2-2-4" class="outline-4">
<h4 id="sec-2-2-4">Step 4: Provide Hardware Drivers</h4>
<div class="outline-text-4" id="text-2-2-4">

<ul>
<li>Without the proper mouse and keyboard drivers, you will not be able to give any input to your application when it is installed on the target device.
<ul>
<li>You must also ensure that the appropriate screen driver is present to make the server process able to put the application's widgets on screen.
</li>
</ul>

</li>
<li>Qt for Embedded Linux provides several ready-made mouse, keyboard and screen drivers, see the pointer handling, character input and display management documentation for details.
</li>
<li>In addition, custom drivers can be added by deriving from the QWSMouseHandler, QWSKeyboardHandler and QScreen classes respectively, and by creating corresponding plugins to make use of Qt's plugin mechanism (dynamically loading the drivers into the server application at runtime).
<ul>
<li>Note that the plugins must be located in a location where Qt will look for plugins, e.g., the standard plugin directory.
</li>
</ul>

</li>
<li>See the How to Create Qt Plugins documentation and the Plug &amp; Paint example for details.
</li>
</ul>

</div>

</div>

<div id="outline-container-2-2-5" class="outline-4">
<h4 id="sec-2-2-5">Step 5: Build the Target Specific Executable</h4>
<div class="outline-text-4" id="text-2-2-5">

<ul>
<li>Before building the executable, you must specify the target architecture as well as the target specific hardware drivers by running the configure script:



<pre class="src src-sh"><span style="color: #b0c4de;">cd</span> path/to/QtEmbedded
./configure -embedded &lt;architecture&gt; -qt-kbd-&lt;keyboarddriver&gt; -qt-mouse-&lt;mousedriver&gt; -qt-gfx-&lt;screendriver&gt; 
</pre>

</li>
<li>It is also important to make sure that all the third party libraries that the application and the Qt libraries require, are present in the tool chain.
<ul>
<li>In particular, if the zlib and jpeg libraries are not available, they must be included by running the configure script with the -L and -I options.
</li>
<li>For example:



<pre class="src src-sh"><span style="color: #b0c4de;">cd</span> path/to/QtEmbedded
./configure  &lt;other options&gt; -L /path/to/libjpeg/libraries -I /path/to/libjpeg/headers 
</pre>

<ul>
<li>The JPEG source can be downloaded from <a href="http://www.ijg.org/">http://www.ijg.org/</a>.
</li>
<li>The Qt for Embedded Linux distribution includes a version of the zlib source that can be compiled into the Qt for Embedded Linux library.
</li>
<li>If integrators wish to use a later version of the zlib library, it can be downloaded from the <a href="http://www.gzip.org/zlib/">http://www.gzip.org/zlib/</a> website.
</li>
</ul>

</li>
</ul>

</li>
</ul>

</div>

</div>

<div id="outline-container-2-2-6" class="outline-4">
<h4 id="sec-2-2-6">Then build the executable:</h4>
<div class="outline-text-4" id="text-2-2-6">




<pre class="src src-sh"><span style="color: #b0c4de;">cd</span> path/to/myApplication
qmake -project
qmake
make  
</pre>

<ul>
<li>That's all. Your target specific executable is ready for deployment.
</li>
</ul>


</div>
</div>

</div>

<div id="outline-container-2-3" class="outline-3">
<h3 id="sec-2-3">Links</h3>
<div class="outline-text-3" id="text-2-3">

<ul>
<li><a href="http://qt-project.org/doc/qt-4.8/qt-embedded-linux.html">http://qt-project.org/doc/qt-4.8/qt-embedded-linux.html</a>
</li>
<li><a href="http://qt-project.org/doc/qt-4.8/qt-embedded-install.html">http://qt-project.org/doc/qt-4.8/qt-embedded-install.html</a>
</li>
</ul>


</div>
</div>

</div>

<div id="outline-container-3" class="outline-2">
<h2 id="sec-3">Programming for A13 in Debian <sup><a class="footref" name="fnr-.4" href="#fn-.4">4</a></sup></h2>
<div class="outline-text-2" id="text-3">


</div>

<div id="outline-container-3-1" class="outline-3">
<h3 id="sec-3-1">Programming for A13 in debian</h3>
<div class="outline-text-3" id="text-3-1">

<ul>
<li>There are 2 main methods to create programs for your A13 board.
<dl>
<dt>Cross compiling</dt><dd>Setting up a tool chain to compile on another system, which is typically faster and easier to manage.
</dd>
<dt>Programming on board</dt><dd>installing a compiler to compile directly on the board
</dd>
</dl>

</li>
<li>The sections below contain instructions for these 2 methods
</li>
</ul>

</div>

</div>

<div id="outline-container-3-2" class="outline-3">
<h3 id="sec-3-2">Cross Compiling</h3>
<div class="outline-text-3" id="text-3-2">

<ul>
<li>Cross compiling is usually performed on another linux machine, it seems the most common for doing this is ubuntu.
</li>
<li>If you have compiled the kernel and setup the SD card you will already have most of the tool chain setup on your machine
</li>
</ul>


</div>

<div id="outline-container-3-2-1" class="outline-4">
<h4 id="sec-3-2-1">Setting up the tool chain</h4>
<div class="outline-text-4" id="text-3-2-1">

<ul>
<li>The following instructions are to be performed on a linux machine which is not the A13 board.
</li>
<li>Complete the following steps to setup the tool chain.
</li>
<li>These instructions have been tested on ubuntu only however they may work for other distributions.
</li>
</ul>

<ul>
<li id="sec-3-2-1-1">Instructions<br/>
<ul>
<li id="sec-3-2-1-1-1">Install eclipse<br/>
<ul>
<li>Eclipse is a GUI which enables easy compilation and debugging when the appropriate tools have been installed.
</li>
<li>This may be able to be installed using the package manager on your linux system.
</li>
<li>Manual eclipes install
<ul>
<li>To manually install the most up to date eclipse perform the following:
<ol>
<li>Go to the eclipse download section
</li>
<li>Eclipse download Download to your linux machine the suitable eclipse version.
</li>
<li>Decompress the downloaded file into any directory you like by moving the downloaded file to your desired directory. Open a terminal, go to the directory and decompress with the command



<pre class="src src-sh">tar -xzvf FILENAME.
</pre>

<ul>
<li>This will create a directory in this location called eclipse Within this directory is the executable eclipse.exe
</li>
</ul>

</li>
<li>It is recommended to create a launcher on your desktop which points to this executable file to make it easier to start.
</li>
</ol>

</li>
</ul>

</li>
</ul>


</li>
</ul>
<ul>
<li id="sec-3-2-1-1-2">Manual Java runtime install<br/>
<ul>
<li>As eclipse is written in java the jave runtime is required as well.
</li>
<li>Download the java runtime.
</li>
<li>Java download page Download the java RPM file that your eclipse version requires.
</li>
<li>Follow the instructions on the java download page beside the download to install
<ul>
<li>Your eclipse installation should now start up.
</li>
</ul>

</li>
<li>Install the tool chain
<ul>
<li>The instructions contained in this wiki were originally sourced from this page Debugging on embedded using opensource tools
</li>
</ul>

</li>
<li>To compile code for the A13 the ArmV5 tool chain is required.
</li>
<li>Change to super user



<pre class="src src-sh"><span style="color: #fa8072;"># </span><span style="color: #ff7f24; font-style: italic;">sudo su</span>
</pre>

</li>
<li>Install compilers, libs and make # apt-get install gcc g++ make libncurses5-dev
</li>
<li>Open the repository file "/etc/apt/sources.list"
</li>
<li>Add the following line



<pre class="example">deb http://www.emdebian.org/debian/ squeeze main
</pre>

</li>
<li>update the repository info



<pre class="src src-sh"><span style="color: #fa8072;"># </span><span style="color: #ff7f24; font-style: italic;">apt-get update</span>
</pre>


</li>
<li>install some packages



<pre class="src src-sh"><span style="color: #fa8072;"># </span><span style="color: #ff7f24; font-style: italic;">apt-get install linux-libc-dev-armel-cross</span>
<span style="color: #fa8072;"># </span><span style="color: #ff7f24; font-style: italic;">apt-get install libc6-armel-cross</span>
<span style="color: #fa8072;"># </span><span style="color: #ff7f24; font-style: italic;">apt-get install libc6-dev-armel-cross</span>
<span style="color: #fa8072;"># </span><span style="color: #ff7f24; font-style: italic;">apt-get install binutils-arm-linux-gnueabi</span>
<span style="color: #fa8072;"># </span><span style="color: #ff7f24; font-style: italic;">apt-get install gcc-4.4-arm-linux-gnueabi</span>
<span style="color: #fa8072;"># </span><span style="color: #ff7f24; font-style: italic;">apt-get install g++-4.4-arm-linux-gnueabi</span>
<span style="color: #fa8072;"># </span><span style="color: #ff7f24; font-style: italic;">apt-get install uboot-mkimage</span>
</pre>

<ul>
<li>The tool chain should now be installed
</li>
</ul>

</li>
<li>Creating a hello world program using eclipse
<ul>
<li>Follow this tutorial to create a hello world program Debugging on embedded using opensource tools
</li>
</ul>

</li>
</ul>


</li>
</ul>
</li>
</ul>
<ul>
<li id="sec-3-2-1-2">Some issues found for some users:<br/>
<ul>
<li id="sec-3-2-1-2-1">Issue : After having installed eclipse and the toolchain the path and prefix for the compiler as listed in the example could not be found.<br/>
<ul>
<li>Solution : Look for the same prefix in a different path, /usr/bin is likely to hold the files.
</li>
</ul>


</li>
</ul>
<ul>
<li id="sec-3-2-1-2-2">Issue : Having built the program and copied it to the A13 board it will not run resulting in "permission denied"<br/>
<ul>
<li>Solution: Check the permissions for the file are set to allow execution by typing #ls -l . if you dont see a lot of x's (3) in the first column its likely your cause. To change the permissions type #chmod ugo+x FileName
</li>
</ul>


</li>
</ul>
<ul>
<li id="sec-3-2-1-2-3">Issue : executing the file returns "command not found"<br/>
<ul>
<li>Solution: A library file can not be found this is either /lib/ld-linux.so.3 or /lib/ld-linux-armhf.so.3 . To find the specific one your file is looking for open the executable in a text editor on the first line or 2 you will find the file name its looking for ld-linux.so.3 .
</li>
</ul>

</li>
</ul>
</li>
</ul>
</div>
</div>

</div>

<div id="outline-container-3-3" class="outline-3">
<h3 id="sec-3-3">Programming on the A13 board</h3>
<div class="outline-text-3" id="text-3-3">

<ul>
<li>Below is a way to create a hello world program on your A13 olinuxino board in a suitable folder create your code file by typing



<pre class="src src-sh">nano hello.c
</pre>

</li>
<li>type the following into the program



<pre class="src src-c"><span style="color: #6495ed; font-style: italic;">#include</span> <span style="color: #ffc1c1;">&lt;stdio.h&gt;</span>

<span style="color: #00fa9a; font-size: 110%; font-weight: bold;">main</span> ()
{
printf(<span style="color: #ffc1c1;">"hello world\n"</span>);
}

save by pressing ctrl o
exit by pressing <span style="color: #63b8ff;">ctrl</span> <span style="color: #7fffd4;">x</span>
</pre>

</li>
<li>compile the program in the command line by typing



<pre class="src src-sh">gcc -o hello hello.c
</pre>

<p>
  OR
</p>


<pre class="src src-sh">gcc-4.6 -o hello hello.c
</pre>


</li>
<li>make the file executable by typing



<pre class="src src-sh">chmod z+x hello
</pre>


</li>
<li>execute the binary file



<pre class="src src-sh">./hello
</pre>

</li>
<li>this should print out hello world
</li>
<li>if it has this means you have created a program on your A13 olinuxino board
</li>
</ul>

</div>
</div>

</div>

<div id="outline-container-4" class="outline-2">
<h2 id="sec-4">Debugging</h2>
<div class="outline-text-2" id="text-4">


</div>

<div id="outline-container-4-1" class="outline-3">
<h3 id="sec-4-1">Debugging on embedded using opensource tools (part 1) <sup><a class="footref" name="fnr-.5" href="#fn-.5">5</a></sup></h3>
<div class="outline-text-3" id="text-4-1">


</div>

<div id="outline-container-4-1-1" class="outline-4">
<h4 id="sec-4-1-1">Overview</h4>
<div class="outline-text-4" id="text-4-1-1">

<ul>
<li>written by brakova on Dec 19 2012 1:39 PM
</li>
<li>Just a few days ago we got a great surprise from Olimex - the new Olinuxino A13! After setting up the SD card, installing Debian and trying the Agilart platform works on it we wanted to set up the developing environment in order to make it easy to cross compile and cross debug C/C++ code that would run on the microcontroller from the host machine.
</li>
<li>So here is how we worked our way through this and managed to get cross compiling and cross debugging working with the standart GCC and GDB on the Olinuxino Micro board. The same set of steps would work for other microcontrollers too, you just need to have the right toolchain.
</li>
<li>First make sure that you have installed the Eclipse CDT plugin. You cal also install the whole Eclipse IDE for C/C++ Developers. Then you need the appropriate arm toolchain against which you can cross compile your code. In order to generate programs that can run and be debugged on the Olinuxino, we need to install the appropriate compiler and debugger and set up the project in Eclipse.
</li>
<li>Setting up your toolchain for cross compilation
</li>
<li>You don't need ARM based host to develop software for Olinuxino. You can do everything with Ubuntu and a proper cross compiler. To produce code that will run on the Olinuxino you need a toolchain with ARMv5 support. Because Ubuntu has default toolchain arm-linux-gnueabi for ARMv7arm, solution is to get proper toolchain from Debian repositories.



<pre class="src src-sh">sudo apt-get install gcc g++ make libncurses5-dev
</pre>

</li>
<li>Add the following line to /etc/apt/sources.list



<pre class="src src-sh">deb http://www.emdebian.org/debian/ squeeze main
</pre>

</li>
<li>Install the following packages:



<pre class="src src-sh">sudo apt-get install linux-libc-dev-armel-cross
sudo apt-get install libc6-armel-cross
sudo apt-get install libc6-dev-armel-cross
sudo apt-get install binutils-arm-linux-gnueabi
sudo apt-get install gcc-4.4-arm-linux-gnueabi
sudo apt-get install g++-4.4-arm-linux-gnueabi
sudo apt-get install uboot-mkimage
</pre>

</li>
</ul>

</div>

</div>

<div id="outline-container-4-1-2" class="outline-4">
<h4 id="sec-4-1-2">Set up a GCC Cross compiler project in Eclipse</h4>
<div class="outline-text-4" id="text-4-1-2">

<ul>
<li id="sec-4-1-2-1">Open Eclipse and click on File &gt;&gt; New &gt;&gt; C++ Project<br/>
<img src="./img/cross-compile-blog01.png"  alt="./img/cross-compile-blog01.png" />
<ul>
<li>In the Project Type section select the Cross-compile Project. This is how eclipse will know that we don't want to use the standart gcc but another tooolchain(arm-unknown-linux-gnueabi-gcc).
</li>
<li>When you create the project add a simple main.cpp source file.
<ul>
<li>Here we'll do the 'Hello World' in this case 'Hello Olinuxino' project.
</li>
<li>Then go to the project's Settings page and check the cross compiler configuration settings. Have a look at the Path and the Prefix options:
    <img src="./img/cross-compile-blog02.png"  alt="./img/cross-compile-blog02.png" />
</li>
</ul>

</li>
<li>Then we are ready to build the project. In the console check that Eclipse is using the right gcc toolchain. In this case it should be 'arm-unknown-linux-gnueabi-g++'. If it doesn't work for some reason check that the toolchain is installed correctly by building the preject by manually from the terminal. If for some reason you have problems with the toolchain you can download build it yourself by following <a href="http://archlinuxarm.org/developers/distcc-cross-compiling">this guide from the Archlinux community</a>.
<ul>
<li><img src="./img/cross-compile-blog03.png"  alt="./img/cross-compile-blog03.png" />
</li>
</ul>

</li>
<li>Get the executable on the Olinuxino. An easy way to do this is usinf sshfs:



<pre class="src src-sh">sshfs root@olinuxino-hostname:/ ~/olinuxino
</pre>

</li>
<li>It will ask you for the password - remember that the default one is root. Here we use Olinuxino Micro, but any arm-based microcontroller would be the same. You just need the right toolchain. for Raspberry Pi you even need the exact same toolchain.
<ul>
<li><img src="./img/cross-compile-blog04.png"  alt="./img/cross-compile-blog04.png" />
</li>
</ul>

</li>
<li>The next part would cover what are the steps you need to do in order to coss debug from your GCC Exclipse project on the Olinuxino Micro.
<ul>
<li>Cheers!
</li>
</ul>

</li>
</ul>


</li>
</ul>
</div>
</div>
</div>

</div>

<div id="outline-container-5" class="outline-2">
<h2 id="sec-5">Building Debian</h2>
<div class="outline-text-2" id="text-5">


</div>

<div id="outline-container-5-1" class="outline-3">
<h3 id="sec-5-1">Building bootable SD-card with Debian Linux Image for A13-OLinuXino</h3>
<div class="outline-text-3" id="text-5-1">


</div>

<div id="outline-container-5-1-1" class="outline-4">
<h4 id="sec-5-1-1">Info</h4>
<div class="outline-text-4" id="text-5-1-1">

<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup><col class="right" /><col class="left" />
</colgroup>
<tbody>
</tbody>
<tbody>
<tr><td class="right">Title</td><td class="left">Building bootable SD-card with Debian Linux Image for A13-OLinuXino</td></tr>
<tr><td class="right">Author</td><td class="left"></td></tr>
<tr><td class="right">Date</td><td class="left">Oct 12 2012</td></tr>
<tr><td class="right">License</td><td class="left"></td></tr>
<tr><td class="right">URL</td><td class="left"><a href="http://olimex.wordpress.com/2012/10/12/building-bootable-sd-card-with-debian-linux-image-for-a13-olinuxino/">http://olimex.wordpress.com/2012/10/12/building-bootable-sd-card-with-debian-linux-image-for-a13-olinuxino/</a></td></tr>
<tr><td class="right">Accessed</td><td class="left">2013-06-07</td></tr>
</tbody>
</table>

</div>

</div>

<div id="outline-container-5-1-2" class="outline-4">
<h4 id="sec-5-1-2">Article</h4>
<div class="outline-text-4" id="text-5-1-2">

<ul>
<li id="sec-5-1-2-1">Overview<br/>
<ul>
<li>We ship A13-OLinuXino-WIFI with pre-loaded Android 4.0.3 image on the NAND flash, so it runs out of the box and you can have access to all millions of applications of Google Play.
</li>
<li>For those who want to use and develop on this board with Linux I will explain step by step what they should do to make their own SD-card image which to boot Debian on A13-OLinuXino. Big thanks to Dimitar Gamishev who handheld guided me yesterday through the whole build process so I can share now with you :)
</li>
<li>We assume you have computer with Linux, sorry guys but compiling Linux Kernel on Windows is impossible, so if you come from Windows world, don’t be afraid, you can download and install Ubuntu to your computer on top of Windows so you will have dual OS computer and can use Windows or Linux depend on your preferences.
</li>
</ul>

</li>
</ul>
<ul>
<li id="sec-5-1-2-2">1. Setup of the toolchain<br/>
<ul>
<li>You should make sure you have the tools for building the Linux Kernel and install them if you don’t have them. To install new software you should be with super user rights so do this to make sure you are:



<pre class="src src-sh">sudo su
</pre>

<ul>
<li>you will be asked for your password and then your prompt will change to # which means now you are super user, all next commands should be run in this mode



<pre class="src src-sh">apt-get install gcc-4.6-arm-linux-gnueabi ncurses-dev uboot-mkimage build-essential git
</pre>

</li>
</ul>

</li>
<li>with this line you make sure you have all tools necessary for the A13 kernel and uboot build: GCC compiler, the kernel config menu, uboot make image, git and other tools for building the kernel
</li>
<li>after the installation you now have all tools to make your very own A13 kernel image
</li>
</ul>


</li>
</ul>
<ul>
<li id="sec-5-1-2-3">2. Building Uboot<br/>
<ul>
<li>Allwinner community uboot is maintained by Henrik Nordström aka hno on #freenode irc channel.
</li>
<li>First let’s make the directory where we will build the A13-OLinuXino Linux:



<pre class="src src-sh">mkdir olinuxino; <span style="color: #b0c4de;">cd</span> olinuxino
</pre>

</li>
<li>then let’s download the uboot sources from GitHub repository, note there are lot of branches but you have to use sunxi branch, the files are about 70 MB



<pre class="src src-sh">git clone -b sunxi https://github.com/linux-sunxi/u-boot-sunxi.git
</pre>

</li>
<li>after the download you should have new directory



<pre class="src src-sh"><span style="color: #b0c4de;">cd</span> uboot-allwinner/
</pre>

</li>
<li>and with this command you can start the uboot build:



<pre class="src src-sh">make a13_olinuxino <span style="color: #7fffd4;">CROSS_COMPILE</span>=arm-linux-gnueabi-
</pre>

<ul>
<li>as you can see A13-OLinuXino already have support configuration in Allwinner community uboot
</li>
</ul>

</li>
<li>at the end of the process you can check if everything is OK by



<pre class="src src-sh">ls u-boot.bin spl/sunxi-spl.bin
</pre>

<ul>
<li>if you got these two files everything is complete, well done so far :)
</li>
</ul>

</li>
</ul>

</li>
</ul>
<ul>
<li id="sec-5-1-2-4">3. Building the Kernel<br/>
<ul>
<li>The Allwinner community Kernel is maintained by Alejandro Mery aka mnemoc on #freenode irc channel.
</li>
<li>Let’s first go back from uboot directory



<pre class="src src-sh"><span style="color: #b0c4de;">cd</span> ..
</pre>

</li>
<li>then download the Kernel sources, you should use  allwinner-v3.0-android-v2 branch, the sources are about 700 MB so you will have to wait a bit longer with this download:



<pre class="src src-sh">git clone https://github.com/linux-sunxi/linux-sunxi.git
</pre>

</li>
<li>after the download go to the kernel directory



<pre class="src src-sh"><span style="color: #b0c4de;">cd</span> linux-allwinner/
</pre>

<ul>
<li>and compile the a13_configuration:



<pre class="src src-sh">make <span style="color: #7fffd4;">ARCH</span>=arm a13_defconfig
</pre>

<ul>
<li>as you see A13-OLinuXino have pre-made configuration in the community kernel sources



<pre class="src src-sh">make <span style="color: #7fffd4;">ARCH</span>=arm menuconfig
</pre>

<ul>
<li>with this command you add/remove different modules for the different peripherials in the kernel, be careful when use this as this may make the kernel not working
</li>
<li>the menuconfig created .config text file, which you can view/edit even with text editor like vi
</li>
<li>if you want to use GPIOs for instance they are not enabled by default and you can do this by adding:



<pre class="example">SUN4I_GPIO_UGLY = y inside .config
</pre>

</li>
</ul>

</li>
</ul>

</li>
<li>then you can contiue with:



<pre class="src src-sh">make <span style="color: #7fffd4;">ARCH</span>=arm <span style="color: #7fffd4;">CROSS_COMPILE</span>=arm-linux-gnueabi- uImage
</pre>

</li>
</ul>

</li>
<li>when this finish you will have uImage ready and you can build the kernel modules:



<pre class="src src-sh">make <span style="color: #7fffd4;">ARCH</span>=arm <span style="color: #7fffd4;">CROSS_COMPILE</span>=arm-linux-gnueabi- <span style="color: #7fffd4;">INSTALL_MOD_PATH</span>=out modules
make <span style="color: #7fffd4;">ARCH</span>=arm <span style="color: #7fffd4;">CROSS_COMPILE</span>=arm-linux-gnueabi- <span style="color: #7fffd4;">INSTALL_MOD_PATH</span>=out modules_install
</pre>

</li>
<li>DONE! At this point you have uboot and kernel builds ready.
</li>
</ul>


</li>
</ul>
<ul>
<li id="sec-5-1-2-5">4. Make the SD-card<br/>
<ul>
<li>First we have to make the correct card partitions, this is done with fdisk.
</li>
<li>Plug SD card on your SD card reader and do



<pre class="src src-sh">ls /dev/sd
</pre>

</li>
<li>then press two times &lt;TAB&gt; you will see list of your sd devices like sda sdb sdc note that some of these devices may be your hard disk so make sure you know which one is your sd card before proceed as you can damage your HDD if you choose wrong sd-device :) once you know which device is your sdcard like sda use it instead the sdX name in the references below:



<pre class="src src-sh">fdisk -u=sectors /dev/sdX
</pre>

</li>
<li>then do these steps:
<ol>
<li>p
<ul>
<li>will list your partitions
</li>
<li>if there are already partitions on your card do:
</li>
</ul>

</li>
<li>d 1
<ul>
<li>to delete them all
</li>
</ul>

</li>
<li>n p 1
<ul>
<li>create first partition, starting from 2048 and ending to 34815
</li>
</ul>

</li>
<li>beginning 2048 end 34815
<ul>
<li>create second partition
</li>
</ul>

</li>
<li>n p 2 enter enter
<ul>
<li>then list the created partitions:
</li>
</ul>

</li>
<li>p
<ul>
<li>if you did everything correctly you should see something like:



<pre class="example">Disk /dev/sdX: 2001 MB, 2001731584 bytes
42 heads, 41 sectors/track, 2270 cylinders, total 3909632 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0×00000000

Device Boot Start End Blocks Id System
/dev/sdX1 2048 34815 16384 83 Linux
/dev/sdX2 34816 3909631 1937408 83 Linux

then write the partititons to the card
</pre>

</li>
</ul>

</li>
<li>w
</li>
</ol>

</li>
<li>now we have to prepare the file system on the card:
<ul>
<li>the first partition should be vfat as this is FS which Allwinner bootloader understands



<pre class="src src-sh">mkfs.vfat /dev/sdX1
</pre>


</li>
<li>the second should be normal Linux EXT3 FS



<pre class="src src-sh">mkfs.ext3 /dev/sdX2
</pre>

</li>
</ul>

</li>
</ul>


</li>
</ul>
<ul>
<li id="sec-5-1-2-6">5. Debian rootfs<br/>
<ul>
<li>Linux Kernel and Uboot are ready, now we have the Linux distribution rootfs, how to build one is long topic, the good thing is that there are many already pre-built so we can just download one and use.
</li>
<li>exit the kernel directory



<pre class="src src-sh"><span style="color: #b0c4de;">cd</span> ..
</pre>

</li>
<li>download debian rootfs:



<pre class="src src-sh">wget http://hands.com/~lkcl/mele_debian_armhf_minimal.cpio.gz
</pre>

</li>
<li>mount your sd card EXT3 FS partition:



<pre class="src src-sh">mount /dev/sdX2 /mnt
<span style="color: #b0c4de;">cd</span> /mnt/
</pre>

</li>
<li>and unarchive the rootfs



<pre class="src src-sh">gunzip -c /home/user/olinuxino/mele_debian_armhf_minimal.cpio.gz | cpio -i
<span style="color: #b0c4de;">cd</span> ..
sync
umount /mnt
</pre>

</li>
<li>at this point you have Debian on your SD card second partition
</li>
</ul>


</li>
</ul>
<ul>
<li id="sec-5-1-2-7">6.  Write Uboot and Kernel you build<br/>
<ul>
<li>mount



<pre class="src src-sh">mount /dev/sdX1 /mnt/
</pre>


</li>
<li>copy the Kernel uImage to root directory in partition 1



<pre class="src src-sh">cp linux-allwinner/arch/arm/boot/uImage /mnt/
</pre>

</li>
<li>download script.bin from: <a href="https://github.com/OLIMEX/OLINUXINO/blob/master/SOFTWARE/A13/script.bin">https://github.com/OLIMEX/OLINUXINO/blob/master/SOFTWARE/A13/script.bin</a>
<ul>
<li>and copy in same directory with uImage
</li>
</ul>

</li>
<li>script.bin is text file with very important configuration parameters like port GPIO assignments, DDR memory parameters, Video resolution etc, by changing these parameters in the script.bin you can configure your Linux without need to re-compile your kernel again and again this is smart way Allwinner provide for tweaking A13 Linux Kernel
</li>
<li>write the Uboot



<pre class="src src-sh"><span style="color: #b0c4de;">cd</span> uboot-allwinner/
dd <span style="color: #7fffd4;">if</span>=spl/sunxi-spl.bin <span style="color: #7fffd4;">of</span>=/dev/sdX <span style="color: #7fffd4;">bs</span>=1024 <span style="color: #7fffd4;">seek</span>=8
dd <span style="color: #7fffd4;">if</span>=u-boot.bin <span style="color: #7fffd4;">of</span>=/dev/sdX <span style="color: #7fffd4;">bs</span>=1024 <span style="color: #7fffd4;">seek</span>=32
sync
umount /mnt
</pre>

</li>
<li>and copy the Kernel modules for partition 2



<pre class="src src-sh">mount /dev/sdX2 /mnt
<span style="color: #b0c4de;">cd</span> ..
cp -a linux-allwinner/out/lib/modules/3.0.42+/ /mnt/lib/modules/.
umount /mnt
</pre>

</li>
<li>that’s all folks! now you have SD card ready to boot debian on A13-OLinuXino.
</li>
<li>Connect USB-SERIAL-CABLE-F to UEXT Tx.Rx and GND, put the SD-card in A13-OLinuXino(-WIFI) and apply power supply, you should see Uboot and then Kernel messages on the console
<ul>
<li>default username/password is : root / password
</li>
<li>Have fun!
</li>
</ul>

</li>
</ul>


</li>
</ul>
</div>
</div>

</div>

<div id="outline-container-5-2" class="outline-3">
<h3 id="sec-5-2">Build Bootable SD Card with Debian</h3>
<div class="outline-text-3" id="text-5-2">


</div>

<div id="outline-container-5-2-1" class="outline-4">
<h4 id="sec-5-2-1">Info</h4>
<div class="outline-text-4" id="text-5-2-1">

<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup><col class="right" /><col class="left" />
</colgroup>
<tbody>
</tbody>
<tbody>
<tr><td class="right">Title</td><td class="left"></td></tr>
<tr><td class="right">Author</td><td class="left"></td></tr>
<tr><td class="right">Date</td><td class="left"></td></tr>
<tr><td class="right">License</td><td class="left"></td></tr>
<tr><td class="right">URL</td><td class="left"><a href="https://www.olimex.com/wiki/Build_Bootable_SD_Card_with_Debian">https://www.olimex.com/wiki/Build_Bootable_SD_Card_with_Debian</a></td></tr>
<tr><td class="right">Accessed</td><td class="left"></td></tr>
</tbody>
</table>


</div>

</div>

<div id="outline-container-5-2-2" class="outline-4">
<h4 id="sec-5-2-2">Article</h4>
<div class="outline-text-4" id="text-5-2-2">

<ul>
<li id="sec-5-2-2-1">Overview<br/>
<ul>
<li>The A13-OLinuXino-WIFI board ships with pre-loaded Android 4.0.3 image on the NAND flash, so it runs out of the box and you can have access to millions of applications on Google Play.
</li>
<li>There are also prebuilt SD card images that will boot to debian, they are linked to on the main A13 wiki page. These are suitable for anyone that doesn't want special kernel options.
</li>
<li>For those who want to use and develop on this board with Linux and require non standard kernel configurations this wiki explains step by step instructions to create an SD-card image that boots Debian on A13-OLinuXino. Big thanks to Dimitar Gamishev who initially demonstrated the whole build process.
</li>
<li>Note: The content is largely taken from this page of instructions
</li>
</ul>


</li>
</ul>
<ul>
<li id="sec-5-2-2-2">building bootable sd card with debian linux image for a13 olinuxino<br/>
<ul>
<li>U-boot Sunxi Wiki with detailed info
</li>
</ul>

<ul>
<li id="sec-5-2-2-2-1">Contents<br/>
<ol>
<li>Tools required
</li>
<li>Instructions
  2.1 Setup of the toolchain
  2.2 Building Uboot
  2.3 Building the Kernel
  2.4 Format and setup the SD-card
  2.5 Debian rootfs
  2.6 Write Uboot and Kernel you build
</li>
<li>Software Links
</li>
</ol>


</li>
</ul>
<ul>
<li id="sec-5-2-2-2-2">Tools required<br/>
<ul>
<li>A13-OLinuXino or A13-OLinuXino-WIFI
</li>
<li>Micro SD card larger than 2g
</li>
<li>A method to check the system worked, VGA screen or serial cable
</li>
<li>A computer that can run linux (These instructions do not work for windows)
<ul>
<li>Note: you can install Ubuntu freely to work on a machine that currently has windows. You will have the option to boot to either windows or linux
</li>
</ul>

</li>
<li>Method to read or write to a Micro SD card from this computer.
</li>
<li>An internet connection for the linux computer
</li>
</ul>


</li>
</ul>
<ul>
<li id="sec-5-2-2-2-3">Instructions<br/>
<ul>
<li id="sec-5-2-2-2-3-1">Setup of the toolchain<br/>
<ul>
<li>You should make sure you have the tools for building the Linux Kernel and install them if you don’t have them. To install new software you should be with super user rights so do this type in a terminal.



<pre class="src src-sh">sudo su
</pre>

<ul>
<li>you will be asked for your password and then your prompt will change to # which means you are now the super user, all future commands should be run in this mode
</li>
</ul>

</li>
<li>First update apt-get links by typing



<pre class="src src-sh">apt-get update
</pre>

</li>
<li>Install the toolchain by typing the following.



<pre class="src src-sh">apt-get install gcc-4.6-arm-linux-gnueabi ncurses-dev uboot-mkimage build-essential git
</pre>

<ul>
<li>with this line you make sure you have all tools necessary for the A13 kernel and uboot build:
<ul>
<li>GCC compiler used to compile the kernal
</li>
<li>The kernel config menu
</li>
<li>uboot make image which is required to allow the SD card to book into the linux image
</li>
<li>Git which allows you to download from the github which holds source code for some of the system
</li>
<li>Some other tools for building the kernel
</li>
</ul>

</li>
</ul>

</li>
<li>after the installation you now have all tools to make your very own A13 kernel image
</li>
</ul>

</li>
</ul>
<ul>
<li id="sec-5-2-2-2-3-2">Building Uboot<br/>
<ul>
<li>The Allwinner community uboot is maintained by Henrik Nordström aka hno on #freenode irc channel.
</li>
<li>First let’s make the directory where we will build the A13-OLinuXino Linux:



<pre class="src src-sh">mkdir olinuxino <span style="color: #fa8072;"># </span><span style="color: #ff7f24; font-style: italic;">cd olinuxino</span>
</pre>

</li>
<li>Then let’s download the uboot sources from GitHub repository, note there are lot of branches but you have to use sunxi branch, the files are about 70 MB



<pre class="src src-sh">git clone -b sunxi https://github.com/linux-sunxi/u-boot-sunxi.git
</pre>

</li>
<li>After the download you should have a new directory



<pre class="src src-sh"><span style="color: #b0c4de;">cd</span> uboot-allwinner/
</pre>

</li>
<li>With the following command you can start the uboot build:



<pre class="src src-sh">make a13_olinuxino <span style="color: #7fffd4;">CROSS_COMPILE</span>=arm-linux-gnueabi-
</pre>

</li>
<li>As you can see A13-OLinuXino already have support configuration in Allwinner community uboot
</li>
<li>At the end of the process you can check if everything is OK by



<pre class="src src-sh">ls u-boot.bin spl/sunxi-spl.bin
</pre>

</li>
<li>If you got these two files everything is complete, well done so far
</li>
</ul>

</li>
</ul>
<ul>
<li id="sec-5-2-2-2-3-3">Building the Kernel<br/>
<ul>
<li>The Allwinner community Kernel is maintained by Alejandro Mery aka mnemoc on #freenode irc channel.
</li>
<li>Let’s first go back from uboot directory



<pre class="src src-sh"><span style="color: #b0c4de;">cd</span> ..
</pre>

</li>
<li>Then download the Kernel sources, you should use allwinner-v3.0-android-v2 branch, the sources are about 700 MB so you will have to wait a bit longer with this download:



<pre class="src src-sh">git clone https://github.com/linux-sunxi/linux-sunxi.git
</pre>

</li>
<li>After the download go to the kernel directory



<pre class="src src-sh"><span style="color: #b0c4de;">cd</span> linux-sunxi/
</pre>

</li>
<li>Compile the a13_configuration:



<pre class="src src-sh">make <span style="color: #7fffd4;">ARCH</span>=arm a13_defconfig
</pre>

</li>
<li>as you see A13-OLinuXino have pre-made configuration in the community kernel sources



<pre class="src src-sh">make <span style="color: #7fffd4;">ARCH</span>=arm menuconfig
</pre>

</li>
<li>With this command you can add or remove different modules for the different peripherials in the kernel, be careful when use this as this may cause the kernel to not work properly
</li>
<li>The menuconfig created a .config text file, which you can view/edit even with a text editor like vi
<ul>
<li>if you want to use GPIOs for instance they are not enabled by default and you can do this by adding:



<pre class="example">SUN4I_GPIO_UGLY = y inside .config
</pre>

</li>
<li>then you can contiue with:



<pre class="example">make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- uImage
</pre>

</li>
</ul>

</li>
<li>when this finish's you will have uImage ready and you can build the kernel modules:



<pre class="example">make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=out modules
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=out modules_install
</pre>

</li>
<li>DONE! At this point you have uboot and kernel builds ready.
</li>
</ul>

</li>
</ul>
<ul>
<li id="sec-5-2-2-2-3-4">Format and setup the SD-card<br/>
<ul>
<li>First we have to make the correct card partitions, this is done with fdisk.
</li>
<li>Plug SD card into your SD card reader and enter in the terminal



<pre class="src src-sh">ls /dev/sd
</pre>

</li>
<li>Then press two times &lt;TAB&gt; you will see a list of your sd devices like sda sdb sdc note that some of these devices may be your hard disk so make sure you know which one is your sd card before you proceed as you can damage your HDD if you choose the wrong sd-device. You can do this by unplugging your sd card reader and identify which "sd" devices remove from the list.
</li>
<li>Once you know which device is your sdcard like sda use this text instead of the sdX name in the references below:



<pre class="src src-sh">fdisk -u=sectors /dev/sdX
</pre>

</li>
<li>then do these steps:
<ol>
<li>p
<ul>
<li>will list your partitions
</li>
<li>if there are already partitions on your card do:
</li>
</ul>

</li>
<li>d 1
<ul>
<li>to delete them all
</li>
</ul>

</li>
<li>n p 1
<ul>
<li>create the first partition, starting from 2048 and ending to 34815
</li>
</ul>

</li>
<li>beginning 2048 end 34815
<ul>
<li>create second partition
</li>
</ul>

</li>
<li>n p 2 enter enter
<ul>
<li>then list the created partitions:
</li>
</ul>

</li>
<li>p
<ul>
<li>if you did everything correctly you should see something like:



<pre class="example">Disk /dev/sdX: 2001 MB, 2001731584 bytes
42 heads, 41 sectors/track, 2270 cylinders, total 3909632 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0×00000000

Device Boot Start End Blocks Id System
/dev/sdX1 2048 34815 16384 83 Linux
/dev/sdX2 34816 3909631 1937408 83 Linux


</pre>

</li>
</ul>

</li>
<li>w
<ul>
<li>then write the partititons to the card

</li>
</ul>

</li>
</ol>

</li>
<li>now we have to format the file system on the card:
<ul>
<li>the first partition should be vfat as this is FS which the Allwinner bootloader understands



<pre class="src src-sh">mkfs.vfat /dev/sdX1
</pre>


</li>
<li>the second should be normal Linux EXT3 FS



<pre class="src src-sh">mkfs.ext3 /dev/sdX2
</pre>

</li>
</ul>

</li>
</ul>



</li>
</ul>
<ul>
<li id="sec-5-2-2-2-3-5">Debian rootfs<br/>
<ul>
<li>The Linux Kernel and Uboot are ready, now we have the Linux distribution rootfs, how to build one is a long topic, the good thing is that there are many already pre-built so we can just download one and use.
</li>
<li>exit the kernel directory



<pre class="src src-sh"><span style="color: #b0c4de;">cd</span> ..
</pre>

</li>
<li>download debian rootfs:



<pre class="src src-sh">wget http://hands.com/~lkcl/mele_debian_armhf_minimal.cpio.gz
</pre>

</li>
<li>mount your sd card EXT3 FS partition:



<pre class="src src-sh">mount /dev/sdX2 /mnt
<span style="color: #b0c4de;">cd</span> /mnt/
</pre>

</li>
<li>and unarchive the rootfs



<pre class="src src-sh">gunzip -c /home/user/olinuxino/mele_debian_armhf_minimal.cpio.gz | cpio -i where <span style="color: #ffc1c1;">"user"</span> is the user name of your root user
<span style="color: #b0c4de;">cd</span> ..
sync
umount /mnt
</pre>

<ul>
<li>at this point you have Debian on your SD card second partition
</li>
</ul>

</li>
<li>Write Uboot and Kernel you build



<pre class="src src-sh">mount /dev/sdX1 /mnt/
</pre>

</li>
<li>copy the Kernel uImage to root directory in partition 1



<pre class="src src-sh">cp linux-allwinner/arch/arm/boot/uImage /mnt/.
</pre>

</li>
<li>download the script.bin from: <a href="https://github.com/OLIMEX/OLINUXINO/blob/master/SOFTWARE/A13/script.bin">https://github.com/OLIMEX/OLINUXINO/blob/master/SOFTWARE/A13/script.bin</a>
<ul>
<li>and copy it to the same directory as uImage
</li>
<li>script.bin is a text file with very important configuration parameters like port GPIO assignments, DDR memory parameters, Video resolution etc, by changing these parameters in the script.bin you can configure your Linux without need to re-compile your kernel again and again this is smart way Allwinner provide for tweaking A13 Linux Kernel
</li>
</ul>

</li>
<li>write the Uboot



<pre class="src src-sh"><span style="color: #b0c4de;">cd</span> uboot-allwinner/
dd <span style="color: #7fffd4;">if</span>=spl/sunxi-spl.bin <span style="color: #7fffd4;">of</span>=/dev/sdX <span style="color: #7fffd4;">bs</span>=1024 <span style="color: #7fffd4;">seek</span>=8
dd <span style="color: #7fffd4;">if</span>=u-boot.bin <span style="color: #7fffd4;">of</span>=/dev/sdX <span style="color: #7fffd4;">bs</span>=1024 <span style="color: #7fffd4;">seek</span>=32
sync
umount /mnt
</pre>

</li>
<li>and copy the Kernel modules for partition 2 # mount /dev/sdX2 /mnt



<pre class="src src-sh"><span style="color: #b0c4de;">cd</span> ..
cp -a linux-allwinner/out/lib/modules/3.0.42+/ /mnt/lib/modules/.
umount /mnt
</pre>

<ul>
<li>Now you have an SD card ready to boot debian on A13-OLinuXino.
</li>
</ul>

</li>
<li>Connect USB-SERIAL-CABLE-F to UEXT Tx.Rx and GND, or connect a VGA screen. Put the SD-card in A13-OLinuXino(-WIFI) and apply power, you should see Uboot and then Kernel messages on the console
<ul>
<li>default username/password is : root / password
</li>
</ul>

</li>
</ul>

</li>
</ul>
</li>
</ul>
<ul>
<li id="sec-5-2-2-2-4">Software Links<br/>
<ul>
<li><a href="http://linux-sunxi.org/Linux">Linux Sunxi to build latest Kernel yourself</a>
</li>
<li><a href="http://linux-sunxi.org/U-boot">U-boot</a> to build community U-boot
</li>
<li><a href="http://olimex.wordpress.com/2012/10/12/building-bootable-sd-card-with-debian-linux-image-for-a13-olinuxino/">Building bootable Debian SD card</a> for A13-OLinuXino Original step by step instructions how to make SD card image with above Kernel and U-boot
</li>
<li><a href="https://www.olimex.com/forum/index.php?topic=518.0">Forum post</a> with yet another more up to date explanation how to build SD card
</li>
</ul>


<div id="footnotes">
<h2 class="footnotes">Footnotes: </h2>
<div id="text-footnotes">
<p class="footnote"><sup><a class="footnum" name="fn-.1" href="#fnr-.1">1</a></sup> <a href="https://help.ubuntu.com/community/Repositories/CommandLine">https://help.ubuntu.com/community/Repositories/CommandLine</a>
</p>


<p class="footnote"><sup><a class="footnum" name="fn-.2" href="#fnr-.2">2</a></sup> <a href="http://qt-project.org/doc/qt-4.8/qt-embedded-linux.html">http://qt-project.org/doc/qt-4.8/qt-embedded-linux.html</a>
</p>


<p class="footnote"><sup><a class="footnum" name="fn-.3" href="#fnr-.3">3</a></sup> <a href="http://qt-project.org/doc/qt-4.8/qt-embedded-crosscompiling.html">http://qt-project.org/doc/qt-4.8/qt-embedded-crosscompiling.html</a>
</p>


<p class="footnote"><sup><a class="footnum" name="fn-.4" href="#fnr-.4">4</a></sup> <a href="https://www.olimex.com/wiki/Programming_for_A13_in_debian#Creating_a_hello_world_program_using_eclipse">https://www.olimex.com/wiki/Programming_for_A13_in_debian#Creating_a_hello_world_program_using_eclipse</a>
</p>


<p class="footnote"><sup><a class="footnum" name="fn-.5" href="#fnr-.5">5</a></sup> <a href="http://www.agilart.com/blog/debugging-on-embedded-using-opensource-tools-part-1">http://www.agilart.com/blog/debugging-on-embedded-using-opensource-tools-part-1</a>
</p>


</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</div>

</div>
</div>
</div>

<div id="postamble">
<p class="date">Date: 2013-09-27T14:32-0400</p>
<p class="creator"><a href="http://orgmode.org">Org</a> version 7.9.2 with <a href="http://www.gnu.org/software/emacs/">Emacs</a> version 23</p>
<a href="http://validator.w3.org/check?uri=referer">Validate XHTML 1.0</a>

</div>
</body>
</html>
